@vascend/talos 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (620) hide show
  1. package/README.md +202 -0
  2. package/dist/backend/asset-events.d.ts +31 -0
  3. package/dist/backend/asset-events.js +149 -0
  4. package/dist/backend/assets.d.ts +31 -0
  5. package/dist/backend/assets.js +210 -0
  6. package/dist/backend/auth.d.ts +18 -0
  7. package/dist/backend/auth.js +59 -0
  8. package/dist/backend/config.d.ts +14 -0
  9. package/dist/backend/config.js +41 -0
  10. package/dist/backend/conversations.d.ts +21 -0
  11. package/dist/backend/conversations.js +141 -0
  12. package/dist/backend/crypto.d.ts +9 -0
  13. package/dist/backend/crypto.js +68 -0
  14. package/dist/backend/engine.d.ts +13 -0
  15. package/dist/backend/engine.js +78 -0
  16. package/dist/backend/http.d.ts +25 -0
  17. package/dist/backend/http.js +112 -0
  18. package/dist/backend/index.d.ts +1 -0
  19. package/dist/backend/index.js +24 -0
  20. package/dist/backend/routes.d.ts +14 -0
  21. package/dist/backend/routes.js +169 -0
  22. package/dist/backend/sdk.d.ts +12 -0
  23. package/dist/backend/sdk.js +11 -0
  24. package/dist/backend/server.d.ts +12 -0
  25. package/dist/backend/server.js +91 -0
  26. package/dist/backend/temp-image-store.d.ts +46 -0
  27. package/dist/backend/temp-image-store.js +197 -0
  28. package/dist/backend/types.d.ts +103 -0
  29. package/dist/backend/types.js +29 -0
  30. package/dist/backend/users.d.ts +13 -0
  31. package/dist/backend/users.js +76 -0
  32. package/dist/backend/ws-handler.d.ts +14 -0
  33. package/dist/backend/ws-handler.js +72 -0
  34. package/dist/backend/ws.d.ts +19 -0
  35. package/dist/backend/ws.js +146 -0
  36. package/dist/core/agent.d.ts +56 -0
  37. package/dist/core/agent.js +1783 -0
  38. package/dist/core/background.d.ts +45 -0
  39. package/dist/core/background.js +140 -0
  40. package/dist/core/bootstrap.d.ts +45 -0
  41. package/dist/core/bootstrap.js +294 -0
  42. package/dist/core/cli-args.d.ts +41 -0
  43. package/dist/core/cli-args.js +282 -0
  44. package/dist/core/collapsible-output.d.ts +38 -0
  45. package/dist/core/collapsible-output.js +143 -0
  46. package/dist/core/compaction-checkpoint.d.ts +9 -0
  47. package/dist/core/compaction-checkpoint.js +58 -0
  48. package/dist/core/compaction.d.ts +42 -0
  49. package/dist/core/compaction.js +270 -0
  50. package/dist/core/config.d.ts +49 -0
  51. package/dist/core/config.js +417 -0
  52. package/dist/core/context-ledger.d.ts +99 -0
  53. package/dist/core/context-ledger.js +222 -0
  54. package/dist/core/context-policy.d.ts +17 -0
  55. package/dist/core/context-policy.js +81 -0
  56. package/dist/core/continuation-review.d.ts +23 -0
  57. package/dist/core/continuation-review.js +64 -0
  58. package/dist/core/crash-report.d.ts +3 -0
  59. package/dist/core/crash-report.js +27 -0
  60. package/dist/core/credentials.d.ts +11 -0
  61. package/dist/core/credentials.js +183 -0
  62. package/dist/core/doctor.d.ts +24 -0
  63. package/dist/core/doctor.js +125 -0
  64. package/dist/core/effort.d.ts +5 -0
  65. package/dist/core/effort.js +42 -0
  66. package/dist/core/env-paths.d.ts +3 -0
  67. package/dist/core/env-paths.js +38 -0
  68. package/dist/core/execution-guidance.d.ts +9 -0
  69. package/dist/core/execution-guidance.js +73 -0
  70. package/dist/core/execution-target.d.ts +41 -0
  71. package/dist/core/execution-target.js +69 -0
  72. package/dist/core/file-coordination.d.ts +66 -0
  73. package/dist/core/file-coordination.js +176 -0
  74. package/dist/core/file-lease-store.d.ts +14 -0
  75. package/dist/core/file-lease-store.js +89 -0
  76. package/dist/core/image-limits.d.ts +26 -0
  77. package/dist/core/image-limits.js +205 -0
  78. package/dist/core/interruptible-completion.d.ts +3 -0
  79. package/dist/core/interruptible-completion.js +42 -0
  80. package/dist/core/kingdoms-mode-state.d.ts +24 -0
  81. package/dist/core/kingdoms-mode-state.js +139 -0
  82. package/dist/core/licenza.d.ts +38 -0
  83. package/dist/core/licenza.js +125 -0
  84. package/dist/core/model-limits.d.ts +2 -0
  85. package/dist/core/model-limits.js +36 -0
  86. package/dist/core/output-lifecycle.d.ts +44 -0
  87. package/dist/core/output-lifecycle.js +190 -0
  88. package/dist/core/package-update.d.ts +15 -0
  89. package/dist/core/package-update.js +121 -0
  90. package/dist/core/permission-queue.d.ts +2 -0
  91. package/dist/core/permission-queue.js +20 -0
  92. package/dist/core/prompt-attachment.d.ts +21 -0
  93. package/dist/core/prompt-attachment.js +123 -0
  94. package/dist/core/request-plan.d.ts +16 -0
  95. package/dist/core/request-plan.js +36 -0
  96. package/dist/core/run-timing.d.ts +17 -0
  97. package/dist/core/run-timing.js +123 -0
  98. package/dist/core/self-update.d.ts +17 -0
  99. package/dist/core/self-update.js +54 -0
  100. package/dist/core/session-refs.d.ts +27 -0
  101. package/dist/core/session-refs.js +126 -0
  102. package/dist/core/session-storage.d.ts +4 -0
  103. package/dist/core/session-storage.js +48 -0
  104. package/dist/core/session-title.d.ts +1 -0
  105. package/dist/core/session-title.js +21 -0
  106. package/dist/core/session-usage.d.ts +17 -0
  107. package/dist/core/session-usage.js +74 -0
  108. package/dist/core/session.d.ts +58 -0
  109. package/dist/core/session.js +296 -0
  110. package/dist/core/settings.d.ts +17 -0
  111. package/dist/core/settings.js +107 -0
  112. package/dist/core/storage-retention.d.ts +21 -0
  113. package/dist/core/storage-retention.js +227 -0
  114. package/dist/core/text-sanitize.d.ts +1 -0
  115. package/dist/core/text-sanitize.js +35 -0
  116. package/dist/core/tool-artifacts.d.ts +6 -0
  117. package/dist/core/tool-artifacts.js +51 -0
  118. package/dist/core/tool-compress.d.ts +8 -0
  119. package/dist/core/tool-compress.js +111 -0
  120. package/dist/core/tool-executor.d.ts +16 -0
  121. package/dist/core/tool-executor.js +97 -0
  122. package/dist/core/tool-result-index.d.ts +52 -0
  123. package/dist/core/tool-result-index.js +327 -0
  124. package/dist/core/tool-result-store.d.ts +38 -0
  125. package/dist/core/tool-result-store.js +190 -0
  126. package/dist/core/tool-scheduler.d.ts +16 -0
  127. package/dist/core/tool-scheduler.js +35 -0
  128. package/dist/core/trust.d.ts +21 -0
  129. package/dist/core/trust.js +95 -0
  130. package/dist/core/types.d.ts +402 -0
  131. package/dist/core/types.js +1 -0
  132. package/dist/core/update-check.d.ts +26 -0
  133. package/dist/core/update-check.js +89 -0
  134. package/dist/core/update-process.d.ts +10 -0
  135. package/dist/core/update-process.js +31 -0
  136. package/dist/core/user-inbox.d.ts +23 -0
  137. package/dist/core/user-inbox.js +56 -0
  138. package/dist/core/user-input.d.ts +10 -0
  139. package/dist/core/user-input.js +35 -0
  140. package/dist/core/version.d.ts +1 -0
  141. package/dist/core/version.js +10 -0
  142. package/dist/core/vibe-modes.d.ts +38 -0
  143. package/dist/core/vibe-modes.js +383 -0
  144. package/dist/core/workspace-roots.d.ts +13 -0
  145. package/dist/core/workspace-roots.js +91 -0
  146. package/dist/core/workspace-sessions.d.ts +51 -0
  147. package/dist/core/workspace-sessions.js +243 -0
  148. package/dist/cowork/client.d.ts +29 -0
  149. package/dist/cowork/client.js +49 -0
  150. package/dist/cowork/engine-bridge.d.ts +22 -0
  151. package/dist/cowork/engine-bridge.js +98 -0
  152. package/dist/cowork/index.d.ts +11 -0
  153. package/dist/cowork/index.js +16 -0
  154. package/dist/cowork/ipc.d.ts +97 -0
  155. package/dist/cowork/ipc.js +96 -0
  156. package/dist/cowork/manager.d.ts +66 -0
  157. package/dist/cowork/manager.js +325 -0
  158. package/dist/cowork/store.d.ts +23 -0
  159. package/dist/cowork/store.js +182 -0
  160. package/dist/cowork/sync.d.ts +20 -0
  161. package/dist/cowork/sync.js +164 -0
  162. package/dist/cowork/types.d.ts +78 -0
  163. package/dist/cowork/types.js +21 -0
  164. package/dist/extensions/ext-tools.d.ts +3 -0
  165. package/dist/extensions/ext-tools.js +73 -0
  166. package/dist/extensions/loader.d.ts +91 -0
  167. package/dist/extensions/loader.js +474 -0
  168. package/dist/extensions/settings.d.ts +20 -0
  169. package/dist/extensions/settings.js +86 -0
  170. package/dist/extensions/types.d.ts +219 -0
  171. package/dist/extensions/types.js +1 -0
  172. package/dist/horizon/async-queue.d.ts +9 -0
  173. package/dist/horizon/async-queue.js +46 -0
  174. package/dist/horizon/engine.d.ts +85 -0
  175. package/dist/horizon/engine.js +603 -0
  176. package/dist/horizon/index.d.ts +4 -0
  177. package/dist/horizon/index.js +2 -0
  178. package/dist/horizon/main-team.d.ts +163 -0
  179. package/dist/horizon/main-team.js +774 -0
  180. package/dist/horizon/types.d.ts +233 -0
  181. package/dist/horizon/types.js +1 -0
  182. package/dist/index.d.ts +2 -0
  183. package/dist/index.js +233 -0
  184. package/dist/mcp/protocol.d.ts +81 -0
  185. package/dist/mcp/protocol.js +122 -0
  186. package/dist/package.json +1 -0
  187. package/dist/packages/packages.d.ts +12 -0
  188. package/dist/packages/packages.js +323 -0
  189. package/dist/prompts/templates.d.ts +13 -0
  190. package/dist/prompts/templates.js +139 -0
  191. package/dist/providers/anthropic-oauth.d.ts +13 -0
  192. package/dist/providers/anthropic-oauth.js +124 -0
  193. package/dist/providers/anthropic.d.ts +27 -0
  194. package/dist/providers/anthropic.js +526 -0
  195. package/dist/providers/catalog.d.ts +15 -0
  196. package/dist/providers/catalog.js +166 -0
  197. package/dist/providers/effort.d.ts +12 -0
  198. package/dist/providers/effort.js +102 -0
  199. package/dist/providers/model-catalog.d.ts +43 -0
  200. package/dist/providers/model-catalog.js +70 -0
  201. package/dist/providers/model-effort.d.ts +5 -0
  202. package/dist/providers/model-effort.js +43 -0
  203. package/dist/providers/model-registry.d.ts +39 -0
  204. package/dist/providers/model-registry.js +142 -0
  205. package/dist/providers/models-dev.d.ts +9 -0
  206. package/dist/providers/models-dev.js +97 -0
  207. package/dist/providers/oauth-callback-server.d.ts +28 -0
  208. package/dist/providers/oauth-callback-server.js +184 -0
  209. package/dist/providers/oauth-orchestrator.d.ts +58 -0
  210. package/dist/providers/oauth-orchestrator.js +159 -0
  211. package/dist/providers/oauth-store.d.ts +12 -0
  212. package/dist/providers/oauth-store.js +139 -0
  213. package/dist/providers/open-browser.d.ts +20 -0
  214. package/dist/providers/open-browser.js +92 -0
  215. package/dist/providers/openai-compat.d.ts +14 -0
  216. package/dist/providers/openai-compat.js +523 -0
  217. package/dist/providers/openai-oauth.d.ts +15 -0
  218. package/dist/providers/openai-oauth.js +382 -0
  219. package/dist/providers/openrouter-auth.d.ts +73 -0
  220. package/dist/providers/openrouter-auth.js +321 -0
  221. package/dist/providers/openrouter-manual-fallback.d.ts +25 -0
  222. package/dist/providers/openrouter-manual-fallback.js +161 -0
  223. package/dist/providers/openrouter.d.ts +15 -0
  224. package/dist/providers/openrouter.js +107 -0
  225. package/dist/providers/plan-limits.d.ts +6 -0
  226. package/dist/providers/plan-limits.js +175 -0
  227. package/dist/providers/provider-reset.d.ts +4 -0
  228. package/dist/providers/provider-reset.js +83 -0
  229. package/dist/providers/quota-limits.d.ts +4 -0
  230. package/dist/providers/quota-limits.js +33 -0
  231. package/dist/providers/registry.d.ts +33 -0
  232. package/dist/providers/registry.js +213 -0
  233. package/dist/providers/retry.d.ts +37 -0
  234. package/dist/providers/retry.js +347 -0
  235. package/dist/rpc/server.d.ts +23 -0
  236. package/dist/rpc/server.js +222 -0
  237. package/dist/sdk.d.ts +67 -0
  238. package/dist/sdk.js +64 -0
  239. package/dist/skills/skills.d.ts +17 -0
  240. package/dist/skills/skills.js +155 -0
  241. package/dist/text-sanitize.js +28 -0
  242. package/dist/tools/ask-user.d.ts +2 -0
  243. package/dist/tools/ask-user.js +60 -0
  244. package/dist/tools/builtin.d.ts +48 -0
  245. package/dist/tools/builtin.js +2494 -0
  246. package/dist/tools/capabilities.d.ts +5 -0
  247. package/dist/tools/capabilities.js +55 -0
  248. package/dist/tools/computer-capture.d.ts +2 -0
  249. package/dist/tools/computer-capture.js +91 -0
  250. package/dist/tools/computer-posix.d.ts +5 -0
  251. package/dist/tools/computer-posix.js +136 -0
  252. package/dist/tools/computer-use.d.ts +14 -0
  253. package/dist/tools/computer-use.js +108 -0
  254. package/dist/tools/discovery.d.ts +12 -0
  255. package/dist/tools/discovery.js +205 -0
  256. package/dist/tools/execute.d.ts +2 -0
  257. package/dist/tools/execute.js +73 -0
  258. package/dist/tools/normalize-input.d.ts +17 -0
  259. package/dist/tools/normalize-input.js +174 -0
  260. package/dist/tools/output-artifact.d.ts +3 -0
  261. package/dist/tools/output-artifact.js +80 -0
  262. package/dist/tools/pagination.d.ts +15 -0
  263. package/dist/tools/pagination.js +93 -0
  264. package/dist/tools/plan-status.d.ts +2 -0
  265. package/dist/tools/plan-status.js +109 -0
  266. package/dist/tools/program-input.d.ts +3 -0
  267. package/dist/tools/program-input.js +19 -0
  268. package/dist/tools/program.d.ts +3 -0
  269. package/dist/tools/program.js +567 -0
  270. package/dist/tools/protocol-catalog.d.ts +12 -0
  271. package/dist/tools/protocol-catalog.js +46 -0
  272. package/dist/tools/ramification-tools.d.ts +12 -0
  273. package/dist/tools/ramification-tools.js +528 -0
  274. package/dist/tools/regex-compat.d.ts +9 -0
  275. package/dist/tools/regex-compat.js +96 -0
  276. package/dist/tools/registry.d.ts +51 -0
  277. package/dist/tools/registry.js +185 -0
  278. package/dist/tools/resolve.d.ts +2 -0
  279. package/dist/tools/resolve.js +107 -0
  280. package/dist/tools/shell-env.d.ts +2 -0
  281. package/dist/tools/shell-env.js +7 -0
  282. package/dist/tools/team-input.d.ts +3 -0
  283. package/dist/tools/team-input.js +129 -0
  284. package/dist/tools/team-tools.d.ts +7 -0
  285. package/dist/tools/team-tools.js +348 -0
  286. package/dist/tools/workspace-sessions.d.ts +2 -0
  287. package/dist/tools/workspace-sessions.js +35 -0
  288. package/dist/tui/account-entry.d.ts +1 -0
  289. package/dist/tui/account-entry.js +93 -0
  290. package/dist/tui/attachment-highlight.d.ts +1 -0
  291. package/dist/tui/attachment-highlight.js +24 -0
  292. package/dist/tui/attachment-refs.d.ts +2 -0
  293. package/dist/tui/attachment-refs.js +3 -0
  294. package/dist/tui/bottom-input.d.ts +219 -0
  295. package/dist/tui/bottom-input.js +1958 -0
  296. package/dist/tui/branding.d.ts +107 -0
  297. package/dist/tui/branding.js +750 -0
  298. package/dist/tui/clipboard-image.d.ts +10 -0
  299. package/dist/tui/clipboard-image.js +163 -0
  300. package/dist/tui/clipboard-text.d.ts +9 -0
  301. package/dist/tui/clipboard-text.js +51 -0
  302. package/dist/tui/clipboard-windows.d.ts +8 -0
  303. package/dist/tui/clipboard-windows.js +84 -0
  304. package/dist/tui/collapsible-command.d.ts +15 -0
  305. package/dist/tui/collapsible-command.js +48 -0
  306. package/dist/tui/command-feedback.d.ts +10 -0
  307. package/dist/tui/command-feedback.js +46 -0
  308. package/dist/tui/command-output-registry.d.ts +28 -0
  309. package/dist/tui/command-output-registry.js +103 -0
  310. package/dist/tui/command-transcript.d.ts +12 -0
  311. package/dist/tui/command-transcript.js +90 -0
  312. package/dist/tui/commands.d.ts +20 -0
  313. package/dist/tui/commands.js +131 -0
  314. package/dist/tui/context-bar.d.ts +4 -0
  315. package/dist/tui/context-bar.js +74 -0
  316. package/dist/tui/context-meter.d.ts +25 -0
  317. package/dist/tui/context-meter.js +81 -0
  318. package/dist/tui/cost-binding.d.ts +8 -0
  319. package/dist/tui/cost-binding.js +43 -0
  320. package/dist/tui/cost-tracker.d.ts +49 -0
  321. package/dist/tui/cost-tracker.js +122 -0
  322. package/dist/tui/diff.d.ts +9 -0
  323. package/dist/tui/diff.js +119 -0
  324. package/dist/tui/i18n-catalog.d.ts +5 -0
  325. package/dist/tui/i18n-catalog.js +184 -0
  326. package/dist/tui/i18n.d.ts +6 -0
  327. package/dist/tui/i18n.js +10 -0
  328. package/dist/tui/image-attachments.d.ts +46 -0
  329. package/dist/tui/image-attachments.js +167 -0
  330. package/dist/tui/images.d.ts +12 -0
  331. package/dist/tui/images.js +87 -0
  332. package/dist/tui/intro.d.ts +13 -0
  333. package/dist/tui/intro.js +109 -0
  334. package/dist/tui/language-preference.d.ts +6 -0
  335. package/dist/tui/language-preference.js +24 -0
  336. package/dist/tui/live-output.d.ts +2 -0
  337. package/dist/tui/live-output.js +18 -0
  338. package/dist/tui/locales.d.ts +19 -0
  339. package/dist/tui/locales.js +22 -0
  340. package/dist/tui/login-menu.d.ts +17 -0
  341. package/dist/tui/login-menu.js +58 -0
  342. package/dist/tui/logo.d.ts +8 -0
  343. package/dist/tui/logo.js +305 -0
  344. package/dist/tui/markdown-inline.d.ts +3 -0
  345. package/dist/tui/markdown-inline.js +99 -0
  346. package/dist/tui/markdown-table.d.ts +4 -0
  347. package/dist/tui/markdown-table.js +63 -0
  348. package/dist/tui/markdown.d.ts +11 -0
  349. package/dist/tui/markdown.js +257 -0
  350. package/dist/tui/mcp-transcript.d.ts +7 -0
  351. package/dist/tui/mcp-transcript.js +40 -0
  352. package/dist/tui/model-details.d.ts +2 -0
  353. package/dist/tui/model-details.js +21 -0
  354. package/dist/tui/model-selection.d.ts +7 -0
  355. package/dist/tui/model-selection.js +41 -0
  356. package/dist/tui/native-scrollback.d.ts +27 -0
  357. package/dist/tui/native-scrollback.js +134 -0
  358. package/dist/tui/onboarding.d.ts +72 -0
  359. package/dist/tui/onboarding.js +207 -0
  360. package/dist/tui/paste-collapse.d.ts +39 -0
  361. package/dist/tui/paste-collapse.js +117 -0
  362. package/dist/tui/perm-mode.d.ts +8 -0
  363. package/dist/tui/perm-mode.js +41 -0
  364. package/dist/tui/prompt-queue-store.d.ts +26 -0
  365. package/dist/tui/prompt-queue-store.js +87 -0
  366. package/dist/tui/prompt-queue.d.ts +47 -0
  367. package/dist/tui/prompt-queue.js +187 -0
  368. package/dist/tui/provider-menu.d.ts +33 -0
  369. package/dist/tui/provider-menu.js +175 -0
  370. package/dist/tui/question.d.ts +24 -0
  371. package/dist/tui/question.js +32 -0
  372. package/dist/tui/queue-screen.d.ts +25 -0
  373. package/dist/tui/queue-screen.js +152 -0
  374. package/dist/tui/queue-team.d.ts +3 -0
  375. package/dist/tui/queue-team.js +28 -0
  376. package/dist/tui/queued-questions.d.ts +20 -0
  377. package/dist/tui/queued-questions.js +163 -0
  378. package/dist/tui/quick-help.d.ts +1 -0
  379. package/dist/tui/quick-help.js +53 -0
  380. package/dist/tui/repl.d.ts +78 -0
  381. package/dist/tui/repl.js +4130 -0
  382. package/dist/tui/restore-queued-input.d.ts +3 -0
  383. package/dist/tui/restore-queued-input.js +20 -0
  384. package/dist/tui/review-detail.d.ts +6 -0
  385. package/dist/tui/review-detail.js +56 -0
  386. package/dist/tui/review-files.d.ts +3 -0
  387. package/dist/tui/review-files.js +22 -0
  388. package/dist/tui/review-render.d.ts +22 -0
  389. package/dist/tui/review-render.js +98 -0
  390. package/dist/tui/review-screen.d.ts +38 -0
  391. package/dist/tui/review-screen.js +358 -0
  392. package/dist/tui/review-store.d.ts +60 -0
  393. package/dist/tui/review-store.js +270 -0
  394. package/dist/tui/review-team.d.ts +2 -0
  395. package/dist/tui/review-team.js +27 -0
  396. package/dist/tui/selector-mouse.d.ts +26 -0
  397. package/dist/tui/selector-mouse.js +65 -0
  398. package/dist/tui/selector.d.ts +51 -0
  399. package/dist/tui/selector.js +299 -0
  400. package/dist/tui/session-replay.d.ts +10 -0
  401. package/dist/tui/session-replay.js +78 -0
  402. package/dist/tui/session-usage.d.ts +22 -0
  403. package/dist/tui/session-usage.js +55 -0
  404. package/dist/tui/skill-transcript.d.ts +5 -0
  405. package/dist/tui/skill-transcript.js +31 -0
  406. package/dist/tui/startup.d.ts +5 -0
  407. package/dist/tui/startup.js +61 -0
  408. package/dist/tui/status-line-loader.d.ts +8 -0
  409. package/dist/tui/status-line-loader.js +33 -0
  410. package/dist/tui/status-line.d.ts +38 -0
  411. package/dist/tui/status-line.js +213 -0
  412. package/dist/tui/system-language.d.ts +8 -0
  413. package/dist/tui/system-language.js +41 -0
  414. package/dist/tui/task-labels.d.ts +2 -0
  415. package/dist/tui/task-labels.js +7 -0
  416. package/dist/tui/term-bg.d.ts +4 -0
  417. package/dist/tui/term-bg.js +67 -0
  418. package/dist/tui/terminal-screen.d.ts +12 -0
  419. package/dist/tui/terminal-screen.js +1 -0
  420. package/dist/tui/terminal-text.d.ts +7 -0
  421. package/dist/tui/terminal-text.js +123 -0
  422. package/dist/tui/theme.d.ts +25 -0
  423. package/dist/tui/theme.js +383 -0
  424. package/dist/tui/tool-style.d.ts +7 -0
  425. package/dist/tui/tool-style.js +119 -0
  426. package/dist/tui/update-prompt.d.ts +14 -0
  427. package/dist/tui/update-prompt.js +104 -0
  428. package/dist/tui/usage-footer.d.ts +9 -0
  429. package/dist/tui/usage-footer.js +123 -0
  430. package/dist/tui/vascend-login.d.ts +68 -0
  431. package/dist/tui/vascend-login.js +355 -0
  432. package/dist/tui/web-login.d.ts +28 -0
  433. package/dist/tui/web-login.js +115 -0
  434. package/dist/vascend/activity-status.d.ts +12 -0
  435. package/dist/vascend/activity-status.js +68 -0
  436. package/dist/vascend/architecture-map.d.ts +73 -0
  437. package/dist/vascend/architecture-map.js +424 -0
  438. package/dist/vascend/attention-layout.d.ts +19 -0
  439. package/dist/vascend/attention-layout.js +141 -0
  440. package/dist/vascend/budget-allocator.d.ts +31 -0
  441. package/dist/vascend/budget-allocator.js +79 -0
  442. package/dist/vascend/candidate-collector.d.ts +20 -0
  443. package/dist/vascend/candidate-collector.js +220 -0
  444. package/dist/vascend/code-events.d.ts +24 -0
  445. package/dist/vascend/code-events.js +304 -0
  446. package/dist/vascend/code-graph-memory.d.ts +38 -0
  447. package/dist/vascend/code-graph-memory.js +334 -0
  448. package/dist/vascend/code-graph-runtime.d.ts +19 -0
  449. package/dist/vascend/code-graph-runtime.js +190 -0
  450. package/dist/vascend/code-graph-types.d.ts +58 -0
  451. package/dist/vascend/code-graph-types.js +50 -0
  452. package/dist/vascend/code-parser.d.ts +4 -0
  453. package/dist/vascend/code-parser.js +257 -0
  454. package/dist/vascend/competitor-knowledge.d.ts +53 -0
  455. package/dist/vascend/competitor-knowledge.js +262 -0
  456. package/dist/vascend/completeness.d.ts +16 -0
  457. package/dist/vascend/completeness.js +90 -0
  458. package/dist/vascend/context-autotuner.d.ts +45 -0
  459. package/dist/vascend/context-autotuner.js +231 -0
  460. package/dist/vascend/context-candidate.d.ts +45 -0
  461. package/dist/vascend/context-candidate.js +150 -0
  462. package/dist/vascend/context-capsule.d.ts +51 -0
  463. package/dist/vascend/context-capsule.js +133 -0
  464. package/dist/vascend/context-fabric.d.ts +108 -0
  465. package/dist/vascend/context-fabric.js +480 -0
  466. package/dist/vascend/context-feedback-loop.d.ts +56 -0
  467. package/dist/vascend/context-feedback-loop.js +204 -0
  468. package/dist/vascend/context-learning-identity.d.ts +4 -0
  469. package/dist/vascend/context-learning-identity.js +8 -0
  470. package/dist/vascend/context-links.d.ts +14 -0
  471. package/dist/vascend/context-links.js +83 -0
  472. package/dist/vascend/context-lint.d.ts +22 -0
  473. package/dist/vascend/context-lint.js +91 -0
  474. package/dist/vascend/context-market-selection.d.ts +17 -0
  475. package/dist/vascend/context-market-selection.js +50 -0
  476. package/dist/vascend/context-metrics.d.ts +25 -0
  477. package/dist/vascend/context-metrics.js +57 -0
  478. package/dist/vascend/context-pack-render.d.ts +16 -0
  479. package/dist/vascend/context-pack-render.js +52 -0
  480. package/dist/vascend/context-pareto.d.ts +33 -0
  481. package/dist/vascend/context-pareto.js +165 -0
  482. package/dist/vascend/context-pattern-explorer.d.ts +41 -0
  483. package/dist/vascend/context-pattern-explorer.js +276 -0
  484. package/dist/vascend/context-regret.d.ts +32 -0
  485. package/dist/vascend/context-regret.js +93 -0
  486. package/dist/vascend/context-retriever.d.ts +22 -0
  487. package/dist/vascend/context-retriever.js +243 -0
  488. package/dist/vascend/context-scope-index.d.ts +5 -0
  489. package/dist/vascend/context-scope-index.js +96 -0
  490. package/dist/vascend/context-scorer.d.ts +35 -0
  491. package/dist/vascend/context-scorer.js +162 -0
  492. package/dist/vascend/context-search-index.d.ts +12 -0
  493. package/dist/vascend/context-search-index.js +25 -0
  494. package/dist/vascend/context-snapshot.d.ts +22 -0
  495. package/dist/vascend/context-snapshot.js +135 -0
  496. package/dist/vascend/context-window-compiler.d.ts +42 -0
  497. package/dist/vascend/context-window-compiler.js +237 -0
  498. package/dist/vascend/contract-memory.d.ts +61 -0
  499. package/dist/vascend/contract-memory.js +435 -0
  500. package/dist/vascend/council.d.ts +58 -0
  501. package/dist/vascend/council.js +337 -0
  502. package/dist/vascend/decision-promotion.d.ts +48 -0
  503. package/dist/vascend/decision-promotion.js +410 -0
  504. package/dist/vascend/delta-context.d.ts +12 -0
  505. package/dist/vascend/delta-context.js +36 -0
  506. package/dist/vascend/dev-context-compiler.d.ts +27 -0
  507. package/dist/vascend/dev-context-compiler.js +133 -0
  508. package/dist/vascend/dev-context-layout.d.ts +30 -0
  509. package/dist/vascend/dev-context-layout.js +262 -0
  510. package/dist/vascend/evidence-slots.d.ts +14 -0
  511. package/dist/vascend/evidence-slots.js +55 -0
  512. package/dist/vascend/expansion-levels.d.ts +15 -0
  513. package/dist/vascend/expansion-levels.js +178 -0
  514. package/dist/vascend/file-lock.d.ts +7 -0
  515. package/dist/vascend/file-lock.js +95 -0
  516. package/dist/vascend/granular-kingdom.d.ts +25 -0
  517. package/dist/vascend/granular-kingdom.js +259 -0
  518. package/dist/vascend/granular-launcher.d.ts +48 -0
  519. package/dist/vascend/granular-launcher.js +202 -0
  520. package/dist/vascend/kingdom-bus.d.ts +25 -0
  521. package/dist/vascend/kingdom-bus.js +54 -0
  522. package/dist/vascend/kingdom-channel.d.ts +22 -0
  523. package/dist/vascend/kingdom-channel.js +180 -0
  524. package/dist/vascend/kingdom-kpi.d.ts +48 -0
  525. package/dist/vascend/kingdom-kpi.js +172 -0
  526. package/dist/vascend/kingdom-live.d.ts +28 -0
  527. package/dist/vascend/kingdom-live.js +61 -0
  528. package/dist/vascend/kingdom-run.d.ts +18 -0
  529. package/dist/vascend/kingdom-run.js +506 -0
  530. package/dist/vascend/kingdom-scribe.d.ts +20 -0
  531. package/dist/vascend/kingdom-scribe.js +52 -0
  532. package/dist/vascend/kingdom.d.ts +79 -0
  533. package/dist/vascend/kingdom.js +870 -0
  534. package/dist/vascend/lexical-index.d.ts +10 -0
  535. package/dist/vascend/lexical-index.js +99 -0
  536. package/dist/vascend/lexical-search.d.ts +29 -0
  537. package/dist/vascend/lexical-search.js +262 -0
  538. package/dist/vascend/long-term-context.d.ts +51 -0
  539. package/dist/vascend/long-term-context.js +194 -0
  540. package/dist/vascend/mandate.d.ts +33 -0
  541. package/dist/vascend/mandate.js +107 -0
  542. package/dist/vascend/memory-packet.d.ts +13 -0
  543. package/dist/vascend/memory-packet.js +155 -0
  544. package/dist/vascend/memory-status.d.ts +22 -0
  545. package/dist/vascend/memory-status.js +73 -0
  546. package/dist/vascend/memory-store.d.ts +62 -0
  547. package/dist/vascend/memory-store.js +273 -0
  548. package/dist/vascend/objective-revision.d.ts +69 -0
  549. package/dist/vascend/objective-revision.js +319 -0
  550. package/dist/vascend/patch-plan-store.d.ts +33 -0
  551. package/dist/vascend/patch-plan-store.js +240 -0
  552. package/dist/vascend/patch-plan.d.ts +97 -0
  553. package/dist/vascend/patch-plan.js +345 -0
  554. package/dist/vascend/plan-progress.d.ts +11 -0
  555. package/dist/vascend/plan-progress.js +68 -0
  556. package/dist/vascend/plan-store.d.ts +64 -0
  557. package/dist/vascend/plan-store.js +460 -0
  558. package/dist/vascend/proof-chains.d.ts +19 -0
  559. package/dist/vascend/proof-chains.js +120 -0
  560. package/dist/vascend/ramification-store.d.ts +25 -0
  561. package/dist/vascend/ramification-store.js +94 -0
  562. package/dist/vascend/ramification.d.ts +193 -0
  563. package/dist/vascend/ramification.js +583 -0
  564. package/dist/vascend/recall-planner.d.ts +17 -0
  565. package/dist/vascend/recall-planner.js +109 -0
  566. package/dist/vascend/requirements.d.ts +31 -0
  567. package/dist/vascend/requirements.js +151 -0
  568. package/dist/vascend/reviewer.d.ts +9 -0
  569. package/dist/vascend/reviewer.js +93 -0
  570. package/dist/vascend/room-graph.d.ts +29 -0
  571. package/dist/vascend/room-graph.js +242 -0
  572. package/dist/vascend/room-memory.d.ts +57 -0
  573. package/dist/vascend/room-memory.js +631 -0
  574. package/dist/vascend/runtime.d.ts +84 -0
  575. package/dist/vascend/runtime.js +286 -0
  576. package/dist/vascend/self-improve.d.ts +104 -0
  577. package/dist/vascend/self-improve.js +396 -0
  578. package/dist/vascend/session-search.d.ts +52 -0
  579. package/dist/vascend/session-search.js +349 -0
  580. package/dist/vascend/supersession-graph.d.ts +14 -0
  581. package/dist/vascend/supersession-graph.js +70 -0
  582. package/dist/vascend/team-areas.d.ts +9 -0
  583. package/dist/vascend/team-areas.js +28 -0
  584. package/dist/vascend/team-handoff.d.ts +24 -0
  585. package/dist/vascend/team-handoff.js +37 -0
  586. package/dist/vascend/team-scheduler.d.ts +13 -0
  587. package/dist/vascend/team-scheduler.js +74 -0
  588. package/dist/vascend/team-session.d.ts +42 -0
  589. package/dist/vascend/team-session.js +142 -0
  590. package/dist/vascend/test-failure-memory.d.ts +76 -0
  591. package/dist/vascend/test-failure-memory.js +354 -0
  592. package/dist/vascend/token-market.d.ts +42 -0
  593. package/dist/vascend/token-market.js +144 -0
  594. package/dist/vascend/tuner-baseline-store.d.ts +52 -0
  595. package/dist/vascend/tuner-baseline-store.js +446 -0
  596. package/dist/vascend/user-profile.d.ts +44 -0
  597. package/dist/vascend/user-profile.js +131 -0
  598. package/dist/vascend/vision.d.ts +94 -0
  599. package/dist/vascend/vision.js +375 -0
  600. package/dist/vascend/work-agent.d.ts +12 -0
  601. package/dist/vascend/work-agent.js +83 -0
  602. package/dist/vascend/work-queue.d.ts +62 -0
  603. package/dist/vascend/work-queue.js +255 -0
  604. package/dist/vascend/work-runner.d.ts +64 -0
  605. package/dist/vascend/work-runner.js +137 -0
  606. package/dist/vascend/worktree.d.ts +38 -0
  607. package/dist/vascend/worktree.js +206 -0
  608. package/dist/vendor/computer-use/README.md +7 -0
  609. package/dist/vendor/computer-use/computer-desktop.js +211 -0
  610. package/dist/vendor/computer-use/computer-observe.js +315 -0
  611. package/dist/vendor/computer-use/computer-scripts.js +1230 -0
  612. package/dist/vendor/computer-use/computer-tools.js +2136 -0
  613. package/dist/vendor/computer-use/package.json +1 -0
  614. package/dist/vendor/computer-use/rac/atomic-input.js +91 -0
  615. package/dist/vendor/computer-use/rac/grammatica.js +101 -0
  616. package/dist/vendor/computer-use/rac/parser.js +185 -0
  617. package/dist/vendor/computer-use/rac/protocol.js +136 -0
  618. package/install.ps1 +30 -0
  619. package/install.sh +50 -0
  620. package/package.json +56 -0
package/README.md ADDED
@@ -0,0 +1,202 @@
1
+ <p align="center">
2
+ <img src="assets/branding/talos-hero.png" alt="Vascend Talos" width="880">
3
+ </p>
4
+
5
+ <h1 align="center">Vascend Talos</h1>
6
+
7
+ <p align="center"><strong>Your models. Your tools. Your coding workflow.</strong><br>
8
+ An extensible coding agent runtime for the terminal and the applications you build.</p>
9
+
10
+ <p align="center">
11
+ <a href="package.json"><img src="https://img.shields.io/badge/version-0.1.0-c5a55a?style=flat-square" alt="v0.1.0"></a>
12
+ <a href="https://bun.sh"><img src="https://img.shields.io/badge/runtime-Bun-171717?style=flat-square&amp;logo=bun&amp;logoColor=white" alt="Bun"></a>
13
+ <a href="src/sdk.ts"><img src="https://img.shields.io/badge/TypeScript-CLI_%2B_SDK-3178c6?style=flat-square&amp;logo=typescript&amp;logoColor=white" alt="TypeScript CLI + SDK"></a>
14
+ <img src="https://img.shields.io/badge/Windows_%7C_macOS_%7C_Linux-555555?style=flat-square" alt="Windows, macOS, Linux">
15
+ </p>
16
+
17
+ <p align="center"><strong>English</strong> · <a href="readme/README.it.md">Italiano</a> · <a href="readme/README.es.md">Español</a> · <a href="readme/README.de.md">Deutsch</a></p>
18
+
19
+ <p align="center">
20
+ <a href="#quick-start">Quick start</a> · <a href="#why-talos">Features</a> · <a href="#cli--sdk">CLI &amp; SDK</a> · <a href="docs/README.md">Documentation</a> · <a href="https://github.com/VascendTechnologies/vascend-talos/issues">Issues</a>
21
+ </p>
22
+
23
+ ---
24
+
25
+ **Talos brings the agent loop, tools and session context into one runtime.** Work in your terminal, automate a task from a script, or embed the same engine in an application. Choose your provider, resume a conversation and extend the workflow with skills and MCP tools.
26
+
27
+ Talos also powers **Vascend Horizon**. The standalone CLI runs independently of the desktop application.
28
+
29
+ ## Quick start
30
+
31
+ Install [Node.js 20 or newer](https://nodejs.org), then run:
32
+
33
+ ```bash
34
+ npm install -g @vascend/talos
35
+ talos
36
+ ```
37
+
38
+ You can also use `bun add -g @vascend/talos`, `pnpm add -g @vascend/talos`, or `yarn global add @vascend/talos` (Yarn Classic).
39
+ The package includes the compiled CLI and SDK; GitHub access and a local build are not required.
40
+
41
+ On macOS and Linux, the installer uses a writable user directory:
42
+
43
+ ```bash
44
+ curl -fsSL https://cdn.jsdelivr.net/npm/@vascend/talos@latest/install.sh | bash
45
+ ```
46
+
47
+ On Windows, run in PowerShell:
48
+
49
+ ```powershell
50
+ irm https://cdn.jsdelivr.net/npm/@vascend/talos@latest/install.ps1 | iex
51
+ ```
52
+
53
+ Both installers require Node.js 20+ and npm. Run `talos` to check for newer stable versions;
54
+ the startup prompt shows `current version → new version` and offers **Skip for now** or **Update now**.
55
+
56
+ On first launch, follow the Vascend account sign-in flow. Use `/login` to configure provider access and `/models` to choose a model. Then give Talos a task:
57
+
58
+ ```text
59
+ Explain this repository, identify its entry points, and suggest where to add tests.
60
+ ```
61
+
62
+ <details>
63
+ <summary><strong>Run from source or update your installation</strong></summary>
64
+
65
+ For a source checkout, install [Git](https://git-scm.com/downloads) and [Bun](https://bun.sh), then use a GitHub account with repository access:
66
+
67
+ ```bash
68
+ git clone https://github.com/VascendTechnologies/vascend-talos.git
69
+ cd vascend-talos
70
+ bun install --frozen-lockfile
71
+ bun run install:cli
72
+ ```
73
+
74
+ For development, run `bun run dev` from the repository. For a single task:
75
+
76
+ ```bash
77
+ bun run src/index.ts -p "Summarize this repository"
78
+ ```
79
+
80
+ To update a clean checkout and rebuild the global commands:
81
+
82
+ ```bash
83
+ git pull --ff-only
84
+ bun install --frozen-lockfile
85
+ bun run install:cli
86
+ ```
87
+
88
+ Full configuration and API key examples: [CLI reference](docs/CLI-REFERENCE.it.md#avvio-dal-sorgente) (Italian).
89
+
90
+ </details>
91
+
92
+ ## Why Talos
93
+
94
+ | Capability | What it gives you |
95
+ | --- | --- |
96
+ | **One engine, multiple interfaces** | Interactive CLI, one-shot tasks, JSONL RPC, a TypeScript SDK and Horizon Engine. |
97
+ | **Provider choice** | Anthropic, OpenAI-compatible providers and local Ollama models, with a model picker inside the session. |
98
+ | **Resumable work** | Saved conversations, session branches, context inspection and project memory. |
99
+ | **Extensible tools** | File and shell tools, MCP connections, skills, hooks and project instructions. |
100
+ | **A readable terminal** | Compact operation previews, full details on demand and questions that leave your draft intact. |
101
+ | **Explicit control** | Configurable permissions, separate desktop consent and teams started on request. |
102
+
103
+ ## Keep your place in the conversation
104
+
105
+ **Keep writing while the agent asks a question.** Questions wait above the prompt. Open one when you are ready, choose an option or select **Other** to write your own answer. Your main prompt and answer drafts remain separate.
106
+
107
+ | Action | Shortcut |
108
+ | --- | --- |
109
+ | Open a pending question | **Shift+←** |
110
+ | Submit an answer | **Enter** |
111
+ | Return to the main prompt and keep the answer draft | **Alt+↓** or **Esc** |
112
+ | Skip the current question | **Ctrl+]** |
113
+ | Read complete tool output | **Ctrl+R** |
114
+ | Manage queued messages | **Alt+Q** or `/queue` |
115
+
116
+ Loaded skills have a compact activity entry; the full content stays in the operation details:
117
+
118
+ ```text
119
+ • Explored
120
+ └ Read SKILL.md (vascend-ops skill)
121
+ ```
122
+
123
+ Use `/language` to choose **English, Italian, Spanish or German**. The choice is saved between launches. `/language system` restores automatic detection; `TALOS_LANGUAGE` provides a process-level override.
124
+
125
+ ## CLI & SDK
126
+
127
+ | Entry point | Example | Use |
128
+ | --- | --- | --- |
129
+ | Interactive terminal | `talos` | Work alongside the agent. |
130
+ | One-shot execution | `talos -p "Explain this project"` | Scripts, pipes and individual tasks; add `--json` for events. |
131
+ | RPC | `talos --rpc` | Connect a host over stdin/stdout using JSONL. |
132
+ | TypeScript SDK | `import { bootstrap, runTurn } from "@vascend/talos"` | Embed the agent loop in a process. |
133
+ | Horizon Engine | `HorizonEngine.create(...)` | Integrate the headless engine with an application. |
134
+
135
+ The SDK import is the package entry point after building and linking or installing the repository. See the [SDK exports](src/sdk.ts) and [architecture](docs/ARCHITECTURE.md).
136
+
137
+ ### Everyday commands
138
+
139
+ | Command | Purpose |
140
+ | --- | --- |
141
+ | `/help` | Browse available commands. |
142
+ | `/login` · `/models` | Configure provider access and select a model. |
143
+ | `/new` · `/resume` | Start a conversation or reopen a saved one. |
144
+ | `/context` · `/usage` | Inspect context and provider usage. |
145
+ | `/todo` · `/collaboratori` | Inspect the plan or explicitly start collaborators. |
146
+ | `/queue` · `/language` | Manage pending messages and the interface language. |
147
+
148
+ ## Providers and extensions
149
+
150
+ Use **Anthropic, OpenAI, OpenRouter, Mistral, DeepSeek, xAI, Together, MiniMax or Ollama**, or configure a compatible endpoint. Available models and authentication methods depend on the provider and your account. See the [provider catalog](src/providers/catalog.ts).
151
+
152
+ - **Project instructions:** define working rules in `AGENTS.md` and `SYSTEM.md`.
153
+ - **Skills:** load reusable instructions from `SKILL.md`, including `/skill:name` invocations.
154
+ - **MCP:** connect external tools through the shared tool protocol.
155
+ - **Extensions:** add tools, commands, hooks and templates to the runtime.
156
+
157
+ The package declares no production npm dependencies. Optional integrations and desktop control can require additional system programs.
158
+
159
+ ## Platforms
160
+
161
+ | Platform | CLI | Desktop control |
162
+ | --- | --- | --- |
163
+ | Windows | Supported | Standalone backend included. |
164
+ | macOS | Supported | Requires `cliclick` and Accessibility / Screen Recording permissions. |
165
+ | Linux | Supported | X11 requires `xdotool` and ImageMagick. Global Wayland control is not supported. |
166
+
167
+ Desktop control requires separate consent, including when automatic tool approvals are enabled. See [Computer Use](docs/COMPUTER-USE.md) for setup and limitations.
168
+
169
+ ## Documentation
170
+
171
+ | Guide | Contents |
172
+ | --- | --- |
173
+ | [Documentation index](docs/README.md) | Find the right guide. |
174
+ | [CLI reference](docs/CLI-REFERENCE.it.md) | Installation, commands, configuration, queues and providers. |
175
+ | [Architecture](docs/ARCHITECTURE.md) | Runtime modules and integration boundaries. |
176
+ | [Computer Use](docs/COMPUTER-USE.md) | Desktop backends, permissions and setup. |
177
+ | [Context Fabric](docs/CONTEXT-FABRIC.md) | Context management and retrieval. |
178
+ | [Tool protocol](docs/TOOL-PROTOCOL.md) | Tool discovery and execution. |
179
+ | [Benchmarks](bench/README.md) | Evaluation suites and how to run them. |
180
+
181
+ This README is available in four languages. The extended technical guides are currently primarily in Italian.
182
+
183
+ ## Development
184
+
185
+ ```bash
186
+ bun run typecheck
187
+ bun run typecheck:bench
188
+ bun run test:unit
189
+ bun run build
190
+ ```
191
+
192
+ Unit test files run in separate processes. For one suite: `bun run test:unit -- test/queued-questions.test.ts`. See the [E2E documentation](test/e2e/README.md) for integration test setup.
193
+
194
+ Report bugs in [Issues](https://github.com/VascendTechnologies/vascend-talos/issues) with your platform, Bun version, reproduction steps and relevant logs, with credentials removed.
195
+
196
+ ## Project and license
197
+
198
+ Built by [Vascend Technologies](https://vascend.it). Inspired by the extensible agent philosophy of [Pi](https://pi.dev).
199
+
200
+ The package is marked **`UNLICENSED`**. This repository does not grant an open-source license; use and distribution require permission from Vascend Technologies.
201
+
202
+ <p align="center"><strong>English</strong> · <a href="readme/README.it.md">Italiano</a> · <a href="readme/README.es.md">Español</a> · <a href="readme/README.de.md">Deutsch</a> · <a href="docs/README.md">Documentation</a></p>
@@ -0,0 +1,31 @@
1
+ import { type RoomRecord } from "../vascend/room-memory.js";
2
+ import type { Asset } from "./types.js";
3
+ export type AssetEventType = "asset.uploaded" | "asset.linked" | "asset.analyzed" | "asset.versioned";
4
+ export interface AssetEvent {
5
+ readonly type: AssetEventType;
6
+ readonly asset: Asset;
7
+ readonly taskId?: string;
8
+ readonly relation?: string;
9
+ readonly analysis?: string;
10
+ readonly version?: string;
11
+ readonly note?: string;
12
+ readonly at: number;
13
+ }
14
+ export interface AssetEventSink {
15
+ emit(event: AssetEvent): void;
16
+ }
17
+ export declare function formatAssetEventRecord(room: string, event: AssetEvent): RoomRecord;
18
+ export declare class RoomMemoryAssetSink implements AssetEventSink {
19
+ private readonly sessionDir;
20
+ private readonly storeId;
21
+ private readonly namespace;
22
+ private constructor();
23
+ static open(sessionDir: string, storeId: string, namespace?: string): RoomMemoryAssetSink;
24
+ emit(event: AssetEvent): void;
25
+ }
26
+ export declare class InMemoryAssetSink implements AssetEventSink {
27
+ private readonly events;
28
+ emit(event: AssetEvent): void;
29
+ all(): readonly AssetEvent[];
30
+ ofType(type: AssetEventType): readonly AssetEvent[];
31
+ }
@@ -0,0 +1,149 @@
1
+ // Dominio EVENTI ASSET: collega l'AssetStore alla memoria delle stanze
2
+ // (RoomMemory, metodo Danilov) generando eventi di memoria per ogni file,
3
+ // immagine, documento o allegato. Ogni operazione produce un evento del
4
+ // dominio "assets.*":
5
+ //
6
+ // asset.uploaded — un asset e' stato caricato (create)
7
+ // asset.linked — un asset e' stato collegato a un task/entita'
8
+ // asset.analyzed — un asset e' stato analizzato (estrazione/OCR/sintesi)
9
+ // asset.versioned — una nuova versione di un asset e' stata registrata
10
+ //
11
+ // Ogni evento viene INDICIZZATO come stanza (RoomRecord livello 0) cosi' da
12
+ // essere richiamabile via il tool `recall` (ricerca per termini o per id).
13
+ // Filosofia del progetto: zero dipendenze a runtime, immutabilita', il sink e'
14
+ // una primitiva iniettabile (non una feature hardcoded nello store).
15
+ import { RoomMemory } from "../vascend/room-memory.js";
16
+ // Etichetta umana breve del tipo evento (per titolo/azione Danilov).
17
+ function actionLabel(type) {
18
+ switch (type) {
19
+ case "asset.uploaded": return "caricato";
20
+ case "asset.linked": return "collegato";
21
+ case "asset.analyzed": return "analizzato";
22
+ case "asset.versioned": return "versionato";
23
+ }
24
+ }
25
+ // Tokenizza un valore in termini utili all'indice (>=2 char, no rumore base).
26
+ // Indicizza sia il token "intero" (es. "bilancio-2024.csv") sia le sue
27
+ // sotto-parole separate da -, ., _, / (es. "bilancio", "2024", "csv") cosi'
28
+ // l'asset e' richiamabile via recall anche cercando una sola parola del nome.
29
+ function terms(...values) {
30
+ const out = new Set();
31
+ const add = (raw) => {
32
+ const t = raw.replace(/^[^a-z0-9]+|[^a-z0-9]+$/g, "");
33
+ if (t.length >= 2)
34
+ out.add(t);
35
+ };
36
+ for (const v of values) {
37
+ if (!v)
38
+ continue;
39
+ for (const whole of v.toLowerCase().match(/[a-z0-9_./-]{2,}/g) ?? []) {
40
+ add(whole);
41
+ for (const part of whole.split(/[-._/]+/))
42
+ add(part);
43
+ }
44
+ }
45
+ return [...out].filter((t) => t.length >= 2);
46
+ }
47
+ function escapeValue(value) {
48
+ return value.replace(/\s+/g, " ").trim().replace(/"/g, "'");
49
+ }
50
+ // Costruisce il RoomRecord Danilov di un evento asset (stanza livello 0).
51
+ // `room` e' l'id assegnato dallo store (namespaced, es. "asset-R1"). Il body
52
+ // e' un blocco INDICE/DEFINIZIONI/RELAZIONI/OUTPUT, coerente col resto della
53
+ // memoria, cosi' la ricerca BM25 di RoomMemory lo trova per termini.
54
+ export function formatAssetEventRecord(room, event) {
55
+ const { type, asset } = event;
56
+ const action = actionLabel(type);
57
+ const title = `${type}: ${asset.name} (${asset.kind})`;
58
+ const indexTerms = [
59
+ ...terms(asset.name, asset.kind, asset.mime, type.replace("asset.", "")),
60
+ ...terms(asset.visionId, event.taskId, event.relation, event.version),
61
+ ...terms(asset.description, event.analysis, event.note),
62
+ "asset",
63
+ action,
64
+ ];
65
+ const uniqTerms = [...new Set(indexTerms)].filter(Boolean).slice(0, 24);
66
+ const def = [
67
+ `@evento[${room}]: type=${type}, action=${action}, at=${event.at}`,
68
+ `@asset[${asset.id}]: name="${escapeValue(asset.name)}", kind=${asset.kind}, mime=${asset.mime}, size=${asset.size}`,
69
+ `@vision[${asset.visionId}]: proprietario_logico`,
70
+ ];
71
+ if (event.taskId) {
72
+ def.push(`@task[${event.taskId}]: relazione=${event.relation ?? "appartiene"}`);
73
+ }
74
+ if (event.analysis) {
75
+ def.push(`@analisi[${room}]: "${escapeValue(event.analysis).slice(0, 600)}"`);
76
+ }
77
+ if (event.version) {
78
+ def.push(`@versione[${room}]: ${escapeValue(event.version)}`);
79
+ }
80
+ if (asset.description) {
81
+ def.push(`@descrizione[${asset.id}]: "${escapeValue(asset.description).slice(0, 400)}"`);
82
+ }
83
+ if (event.note) {
84
+ def.push(`@nota[${room}]: "${escapeValue(event.note).slice(0, 400)}"`);
85
+ }
86
+ const target = event.taskId ? `task:${event.taskId}` : `vision:${asset.visionId}`;
87
+ const rel = `@R: ${room} -> ${type} -> asset:${asset.id} -> ${target} [ ${action} ]`;
88
+ const body = `INDICE
89
+ ${uniqTerms.map((t, i) => `${i + 1} = ${t}`).join("\n")}
90
+
91
+ DEFINIZIONI
92
+ ${def.join("\n")}
93
+
94
+ RELAZIONI
95
+ ${rel}
96
+
97
+ OUTPUT: asset ${asset.id} "${escapeValue(asset.name)}" ${action}${event.taskId ? ` e collegato a ${event.taskId}` : ""}; richiamabile via recall.`;
98
+ return {
99
+ room,
100
+ level: 0,
101
+ title: escapeValue(title).slice(0, 160),
102
+ terms: uniqTerms,
103
+ body,
104
+ children: [],
105
+ parent: null,
106
+ createdAt: event.at,
107
+ };
108
+ }
109
+ // Sink concreto su RoomMemory: indicizza ogni evento come stanza richiamabile
110
+ // via recall. Usa il namespace "asset" per gli id (asset-R1, asset-R2, ...)
111
+ // cosi' gli eventi asset non collidono con le stanze conversazionali e sono
112
+ // filtrabili. Non lancia mai: in caso d'errore inghiotte (best-effort).
113
+ export class RoomMemoryAssetSink {
114
+ sessionDir;
115
+ storeId;
116
+ namespace;
117
+ constructor(sessionDir, storeId, namespace) {
118
+ this.sessionDir = sessionDir;
119
+ this.storeId = storeId;
120
+ this.namespace = namespace;
121
+ }
122
+ // `storeId` e' l'id dello store stanze (sessionId o id regno in Kingdoms).
123
+ static open(sessionDir, storeId, namespace = "asset") {
124
+ return new RoomMemoryAssetSink(sessionDir, storeId, namespace);
125
+ }
126
+ emit(event) {
127
+ try {
128
+ const mem = RoomMemory.open(this.sessionDir, this.storeId);
129
+ const room = mem.nextRoomId(this.namespace);
130
+ mem.append(formatAssetEventRecord(room, event));
131
+ }
132
+ catch {
133
+ // L'indicizzazione e' best-effort: non deve rompere l'operazione asset.
134
+ }
135
+ }
136
+ }
137
+ // Sink in-memory per i test/uso programmatico: tiene gli eventi e li espone.
138
+ export class InMemoryAssetSink {
139
+ events = [];
140
+ emit(event) {
141
+ this.events.push(event);
142
+ }
143
+ all() {
144
+ return this.events;
145
+ }
146
+ ofType(type) {
147
+ return this.events.filter((e) => e.type === type);
148
+ }
149
+ }
@@ -0,0 +1,31 @@
1
+ import { type Asset, type AssetKind } from "./types.js";
2
+ import type { AssetEventSink } from "./asset-events.js";
3
+ export interface CreateAssetInput {
4
+ readonly kind: AssetKind;
5
+ readonly name: string;
6
+ readonly mime?: string;
7
+ readonly data?: Buffer;
8
+ readonly snippet?: string;
9
+ readonly description?: string;
10
+ }
11
+ export declare class AssetStore {
12
+ private readonly file;
13
+ private readonly blobDir;
14
+ private readonly sink?;
15
+ private readonly byId;
16
+ private readonly versions;
17
+ private constructor();
18
+ static open(dataDir: string, sink?: AssetEventSink): AssetStore;
19
+ create(visionId: string, userId: string, input: CreateAssetInput, taskId?: string): Asset;
20
+ linkToTask(id: string, userId: string, taskId: string, relation?: string): Asset;
21
+ recordAnalysis(id: string, userId: string, analysis: string, taskId?: string): Asset;
22
+ addVersion(id: string, userId: string, version: string, note?: string): Asset;
23
+ versionsOf(id: string, userId: string): readonly string[];
24
+ listFor(visionId: string, userId: string): Asset[];
25
+ require(id: string, userId: string): Asset;
26
+ readBlob(id: string, userId: string): Buffer;
27
+ delete(id: string, userId: string): void;
28
+ private blobPath;
29
+ private persist;
30
+ private emit;
31
+ }
@@ -0,0 +1,210 @@
1
+ // Store degli asset di esempio associati a una Vision: i METADATI vivono su un
2
+ // file JSONL append-only (assets.jsonl), mentre il CONTENUTO binario degli
3
+ // asset image/file vive in blob separati su filesystem (assets/blobs/<id>).
4
+ // Gli asset di tipo "snippet" hanno il contenuto inline nei metadati e nessun
5
+ // blob. Stesso stile di ConversationStore. Zero dipendenze a runtime.
6
+ import { appendFileSync, mkdirSync, readFileSync, writeFileSync, existsSync, rmSync, } from "node:fs";
7
+ import { join } from "node:path";
8
+ import { newId } from "./crypto.js";
9
+ import { HttpError } from "./types.js";
10
+ function isDelete(e) {
11
+ return e.op === "delete";
12
+ }
13
+ // Limite di dimensione per un singolo blob (10 MB): sono asset DI ESEMPIO.
14
+ const MAX_BLOB_BYTES = 10 * 1024 * 1024;
15
+ // Limite per il contenuto inline di uno snippet (256 KB).
16
+ const MAX_SNIPPET_BYTES = 256 * 1024;
17
+ export class AssetStore {
18
+ file;
19
+ blobDir;
20
+ sink;
21
+ byId = new Map();
22
+ // Versioni registrate per asset (asset.versioned): id -> elenco versioni.
23
+ versions = new Map();
24
+ constructor(file, blobDir,
25
+ // Sink opzionale degli eventi di memoria (asset.*). Iniettabile: lo store
26
+ // resta una primitiva e non dipende da RoomMemory. Se assente, nessun
27
+ // evento viene emesso (retro-compatibile).
28
+ sink) {
29
+ this.file = file;
30
+ this.blobDir = blobDir;
31
+ this.sink = sink;
32
+ }
33
+ // `sink` opzionale: se passato, ogni operazione emette un evento di memoria
34
+ // (asset.uploaded/linked/analyzed/versioned) indicizzato e richiamabile via
35
+ // recall. Tipicamente RoomMemoryAssetSink.open(sessionDir, sessionId).
36
+ static open(dataDir, sink) {
37
+ const assetsDir = join(dataDir, "assets");
38
+ const blobDir = join(assetsDir, "blobs");
39
+ mkdirSync(blobDir, { recursive: true });
40
+ const store = new AssetStore(join(assetsDir, "assets.jsonl"), blobDir, sink);
41
+ if (existsSync(store.file)) {
42
+ const raw = readFileSync(store.file, "utf8");
43
+ for (const line of raw.split("\n")) {
44
+ if (!line.trim())
45
+ continue;
46
+ try {
47
+ const e = JSON.parse(line);
48
+ if (isDelete(e))
49
+ store.byId.delete(e.id);
50
+ else
51
+ store.byId.set(e.id, stripOp(e));
52
+ }
53
+ catch { /* riga corrotta: ignora */ }
54
+ }
55
+ }
56
+ return store;
57
+ }
58
+ // Crea un asset per una Vision. Per image/file salva il blob su disco; per
59
+ // snippet salva il contenuto inline. Ritorna i metadati persistiti. Emette
60
+ // l'evento di memoria asset.uploaded (e, se `taskId`, lo collega al task).
61
+ create(visionId, userId, input, taskId) {
62
+ const name = input.name.trim();
63
+ if (!name)
64
+ throw new HttpError(400, "nome asset mancante", "invalid_field");
65
+ if (!visionId.trim())
66
+ throw new HttpError(400, "visionId mancante", "invalid_field");
67
+ const id = newId("asset");
68
+ const now = Date.now();
69
+ if (input.kind === "snippet") {
70
+ const snippet = input.snippet ?? "";
71
+ if (Buffer.byteLength(snippet, "utf8") > MAX_SNIPPET_BYTES) {
72
+ throw new HttpError(413, "snippet troppo grande", "payload_too_large");
73
+ }
74
+ const asset = {
75
+ id,
76
+ visionId,
77
+ userId,
78
+ kind: "snippet",
79
+ name: name.slice(0, 200),
80
+ mime: input.mime ?? "text/plain",
81
+ size: Buffer.byteLength(snippet, "utf8"),
82
+ snippet,
83
+ ...(input.description ? { description: input.description.slice(0, 1000) } : {}),
84
+ createdAt: now,
85
+ };
86
+ this.persist(asset);
87
+ this.emit("asset.uploaded", asset, now, taskId ? { taskId, relation: "appartiene" } : {});
88
+ return asset;
89
+ }
90
+ const data = input.data ?? Buffer.alloc(0);
91
+ if (data.length > MAX_BLOB_BYTES) {
92
+ throw new HttpError(413, "asset troppo grande", "payload_too_large");
93
+ }
94
+ writeFileSync(this.blobPath(id), data);
95
+ const asset = {
96
+ id,
97
+ visionId,
98
+ userId,
99
+ kind: input.kind,
100
+ name: name.slice(0, 200),
101
+ mime: input.mime ?? "application/octet-stream",
102
+ size: data.length,
103
+ ...(input.description ? { description: input.description.slice(0, 1000) } : {}),
104
+ createdAt: now,
105
+ };
106
+ this.persist(asset);
107
+ this.emit("asset.uploaded", asset, now, taskId ? { taskId, relation: "appartiene" } : {});
108
+ return asset;
109
+ }
110
+ // Collega un asset a un task (o entita'). Emette asset.linked: l'asset
111
+ // diventa richiamabile via recall in relazione al task di appartenenza.
112
+ linkToTask(id, userId, taskId, relation = "allegato") {
113
+ const asset = this.require(id, userId);
114
+ if (!taskId.trim())
115
+ throw new HttpError(400, "taskId mancante", "invalid_field");
116
+ this.emit("asset.linked", asset, Date.now(), { taskId, relation });
117
+ return asset;
118
+ }
119
+ // Registra l'esito di un'analisi su un asset (OCR, estrazione, sintesi, ...).
120
+ // Emette asset.analyzed con il testo dell'analisi indicizzato per recall.
121
+ recordAnalysis(id, userId, analysis, taskId) {
122
+ const asset = this.require(id, userId);
123
+ const text = analysis.trim();
124
+ if (!text)
125
+ throw new HttpError(400, "analisi vuota", "invalid_field");
126
+ this.emit("asset.analyzed", asset, Date.now(), {
127
+ analysis: text,
128
+ ...(taskId ? { taskId } : {}),
129
+ });
130
+ return asset;
131
+ }
132
+ // Registra una nuova versione di un asset (es. "v2", o un hash). Tiene la
133
+ // cronologia versioni in memoria ed emette asset.versioned.
134
+ addVersion(id, userId, version, note) {
135
+ const asset = this.require(id, userId);
136
+ const v = version.trim();
137
+ if (!v)
138
+ throw new HttpError(400, "versione mancante", "invalid_field");
139
+ const list = this.versions.get(id) ?? [];
140
+ this.versions.set(id, [...list, v]);
141
+ this.emit("asset.versioned", asset, Date.now(), { version: v, ...(note ? { note } : {}) });
142
+ return asset;
143
+ }
144
+ // Versioni registrate per un asset (in ordine di registrazione).
145
+ versionsOf(id, userId) {
146
+ this.require(id, userId);
147
+ return this.versions.get(id) ?? [];
148
+ }
149
+ // Asset di una Vision (verificando la proprieta'), dal piu' recente.
150
+ listFor(visionId, userId) {
151
+ return [...this.byId.values()]
152
+ .filter((a) => a.visionId === visionId && a.userId === userId)
153
+ // Dal piu' recente; a parita' di timestamp ordine deterministico per id.
154
+ .sort((a, b) => b.createdAt - a.createdAt || (a.id < b.id ? 1 : a.id > b.id ? -1 : 0));
155
+ }
156
+ // Recupera i metadati assicurando che l'asset appartenga all'utente.
157
+ require(id, userId) {
158
+ const asset = this.byId.get(id);
159
+ if (!asset)
160
+ throw new HttpError(404, "asset non trovato", "not_found");
161
+ if (asset.userId !== userId)
162
+ throw new HttpError(403, "accesso negato", "forbidden");
163
+ return asset;
164
+ }
165
+ // Legge il blob binario di un asset image/file. Errore per gli snippet.
166
+ readBlob(id, userId) {
167
+ const asset = this.require(id, userId);
168
+ if (asset.kind === "snippet") {
169
+ throw new HttpError(400, "lo snippet non ha un blob: usa i metadati", "no_blob");
170
+ }
171
+ const path = this.blobPath(id);
172
+ if (!existsSync(path))
173
+ throw new HttpError(404, "blob non trovato", "not_found");
174
+ return readFileSync(path);
175
+ }
176
+ delete(id, userId) {
177
+ const asset = this.require(id, userId);
178
+ this.byId.delete(id);
179
+ if (asset.kind !== "snippet") {
180
+ const path = this.blobPath(id);
181
+ if (existsSync(path))
182
+ rmSync(path, { force: true });
183
+ }
184
+ appendFileSync(this.file, JSON.stringify({ op: "delete", id }) + "\n", "utf8");
185
+ }
186
+ blobPath(id) {
187
+ return join(this.blobDir, id);
188
+ }
189
+ persist(asset) {
190
+ this.byId.set(asset.id, asset);
191
+ appendFileSync(this.file, JSON.stringify({ ...asset, op: "upsert" }) + "\n", "utf8");
192
+ }
193
+ // Emette un evento di memoria sul sink, se presente. NON bloccante e non
194
+ // lancia: l'indicizzazione e' best-effort e non deve rompere l'operazione.
195
+ emit(type, asset, at, extra) {
196
+ if (!this.sink)
197
+ return;
198
+ try {
199
+ this.sink.emit({ type, asset, at, ...extra });
200
+ }
201
+ catch {
202
+ // best-effort: ignora gli errori del sink
203
+ }
204
+ }
205
+ }
206
+ function stripOp(e) {
207
+ const { op, ...asset } = e;
208
+ void op;
209
+ return asset;
210
+ }
@@ -0,0 +1,18 @@
1
+ import type { IncomingMessage } from "node:http";
2
+ import type { UserStore } from "./users.js";
3
+ import { type AuthResult, type AuthTokenPayload, type User } from "./types.js";
4
+ import type { BackendConfig } from "./config.js";
5
+ export declare class AuthService {
6
+ private readonly users;
7
+ private readonly config;
8
+ constructor(users: UserStore, config: BackendConfig);
9
+ register(email: string, password: string, displayName?: string): AuthResult;
10
+ login(email: string, password: string): AuthResult;
11
+ private issue;
12
+ resolve(token: string | undefined | null): {
13
+ payload: AuthTokenPayload;
14
+ user: User;
15
+ } | null;
16
+ static extractToken(req: IncomingMessage): string | null;
17
+ requireUser(req: IncomingMessage): User;
18
+ }